package com.zhanghp.demo01.grade;

import com.zhanghp.demo01.visitor.SergeantVisitor;
import com.zhanghp.demo01.visitor.UnitVisitor;

/**
 * <p>
 * 正常来说，3个职级需要各自实现各自的访问方法，我这里直接通过策略模式封装成一个了
 * </p>
 * <p>
 * 我这样做会违反
 * <a href = "https://baike.baidu.com/item/%E9%87%8C%E6%B0%8F%E6%9B%BF%E6%8D%A2%E5%8E%9F%E5%88%99/3744239">里斯科夫替代原则</a>
 * 表明它可以接受所有访客，但实际上只对特定访客感兴趣。
 * </p>
 * <p>
 * 可看demo02示例，详细的访问模式{@link com.zhanghp.demo02.visitor.Visitor}
 * </p>
 *
 * @author zhanghp
 * @date 2022-08-10 10:11
 */
public class Sergeant extends Unit {

    public Sergeant(Unit... unit) {
        super(unit);
    }

    @Override
    public String toString() {
        return "sergeant";
    }

    @Override
    public void accept(UnitVisitor visitor) {
        // 鉴别观察者
        if (visitor instanceof SergeantVisitor) {
            visitor.visit(this);
        }
        super.accept(visitor);
    }
}
